Computer graphics systems (such as three-dimensional (3D) and two-dimensional (2D) computer graphics systems) are used to process data for rendering computer graphics. There is an increasing demand for computer graphics systems to process more complex graphics data with a faster speed of display. One example of a computer graphics system is a tile-based graphics system for rendering 2D or 3D computer graphics images using tile-based rendering. As part of a tile-based rendering technique a rendering space is sub-divided into a plurality of regions called tiles or blocks (herein referred to as “tiles”), which each comprise a plurality of pixels. Tiles are often rectangular, but they may be other shapes such as triangular or hexagonal. The rendering space may correspond to an image for display on a screen, but other render targets, such as texture data in memory, are also possible. Tiles can be various sizes, but as an example, tiles may be 16×16 pixels. In one example of a high screen resolution image there are 1280×1024 pixels. Therefore, as an example, a high screen resolution image may be sub-divided into 5120 tiles (each tile comprising 16×16 pixels).
Tile-based renderers store primitive data representing geometrical objects or other geometry in data blocks (or “primitive blocks”) in memory. The primitive data in a primitive block comprises data of a plurality of vertices which relate to one or more parameters to thereby describe the primitives. The data of a vertex may relate to parameters, such as the location of the vertex and a texture that is to be applied to the primitive. As the complexity of the graphics data and the speed of display increase, the amount of vertex parameter data that is used per second in a computer graphics system for rendering images increases. In one example, the vertex parameter data comprises a plurality of 32-bit words of data per vertex, and there may be of the order of a million vertices in a render of a 3D image. So the memory space for the vertex parameter data used in a 3D render can easily reach hundreds of MB.
Because of the amount of vertex parameter data that a computer graphics system processes, the performance of the system may be affected (e.g. limited) by vertex parameter data memory bandwidth, i.e. the bandwidth between a processing unit where the vertex parameter data is processed and the memory where the vertex parameter data is stored. The vertex parameter data memory bandwidth is a particular issue for tile-based 3D computer graphics systems, in which vertex parameter data is written to memory and may be read from the memory multiple times for processing different tiles where vertices from the primitives are needed to perform a render.
As well as the memory bandwidth, the available space in the memory for storing vertex parameter data may be a factor affecting the performance of a 3D computer graphics system.
To address these issues, the vertex parameter data may be compressed. Compressing the vertex parameter data reduces the amount of vertex parameter data written into memory and read from memory and reduces the amount of memory needed to store the vertex parameter data.
Some compression algorithms are lossy and some compression algorithms are lossless. When a lossy compression algorithm is used to compress data then some of the data is lost. For example, the accuracy of data may be reduced due to compression with a lossy compression algorithm. In contrast, when a lossless compression algorithm is used to compress data then no data is lost. That is, when data is compressed with a lossless compression algorithm and then decompressed with a suitable decompression algorithm, the data after the compression and decompression processes is the same as the data before the compression and decompression processes. Data of a vertex relating to at least some of the parameters may be very sensitive to slight changes, and as such to avoid artefacts in a rendered image, a lossless compression algorithm is used to compress the vertex parameter data.